詳解Terraform第3版 1章〜2章
https://gyazo.com/f7bec0609a1a743fbb4ca5e3e0e50472
#読書感想
1章
構成管理、サーバーテンプレーティング、オーケストレーション、プロビジョニングの違い
Ansibleは構成管理
ミュータブルかイミュータブルか、手続き的か宣言的か
2章
AWS IAMロールの作成
region は ap-northeast-1 に読み替えていく
AMIの選択
書籍リンク: Locating AWS Marketplace AMI Owner Id and Image Name for Packer Builds | by Matt Calhoun | Gruntwork
region 変えたものの ubuntu version CPU arch ほかわからんのでエイヤ
Ubuntu Amazon EC2 AMI Finder
ami-067983a1f071c98a2
ubuntu/images/hvm-ssd/ubuntu-focal-20.04-amd64-server-20240205
code:aws-cli.sh
aws ec2 describe-images --owners amazon --query 'Images*.Name,ImageId' --filters "Name=image-id,Values=ami-067983a1f071c98a2" --output table --profile
Webサーバを起動する
EC2インスタンスを plan/apply で作成
user_dataを使ってワンライナーでHTTPサーバを起動する
nohup busybox httpd -f -p 8080 & Bashで実行してもバックグラウンドで動作させるため
ワンライナーでサーバ起動するシリーズ: Big list of http static server one-liners
起動時に Linux インスタンスでコマンドを実行する - Amazon Elastic Compute Cloud
SGの作成
Ingress port のfrom/to, CIDRブロックの指定
リソース間の依存グラフは teffarorm が理解できる
terraform graph で可視化もできる
curl で成功を確認
補足的に…
シンプルにするため書籍ではデフォルトVPC, デフォルトサブネットにすべてのリソースをデプロイしている
デフォルトVPCのサブネットはすべてパブリック
実運用ではセキュリティがガバい。ポートスキャンされ脆弱
パブリックサブネットで動かすべきはリパプロやロードバランサーのみ
terraform 変数
map,object(構造体型)も変数にできるの知らなかった
code:var.tf
variable "object_sample" {
type = object({
name = string
tags = list(string)
})
default = {
name = "val1"
tags = "foo", "bar", "hoge"
}
}
出力変数
スクリプトに噛ませたいパイプしたいなどで便利
Webサーバクラスタのデプロイ
ASGの作成
Terraformは削除してから作り直す=すでに存在する起動設定を参照するASGがある場合削除できないということになる
データソースを使って data VPCサブネットとしてデフォルトVPCを適用
要参照 詳解Terraform第3版 1章〜2章#65c7074a9929f00000ca6429
LB作成前にエラーが出ちゃった
│ Error: waiting for Auto Scaling Group (terraform-20240210071853818500000002) capacity satisfied: scaling activity (47f63647-88bf-8abd-58d1-406b5b3b3410): Failed: Authentication Failure. Launching EC2 instance failed.
│ scaling activity (92763647-88bc-fe2f-2128-1410202d318c): Failed: Authentication Failure. Launching EC2 instance failed.
destory してから再度 apply した
ロードバランサー作成
ELBにおける、ALB, NLB, CLB の解説
ALB: HTTP(s)トラフィックのロードバランシング (OSI参照モデルのアプリレイヤー、レイヤ7)
NLB: TCP,UDP,TLS トラフィックのロードバランシング (レイヤ4)
CLB: 今は使われることが少ないが以前からある4,7対応のLB
ここでも指定するサブネットにはデフォルトVPCのの据えてのサブネットを使うがEC2はプライベートサブネット、LBはパブリックサブネット、のようになるはずである
ALBけっこう作成するリソースが多いという印象があってつくるものを再整理しないと理解が難しい
ALB(知るべきは自らのサブネットとSG)
SG(責務はインバウンド、アウトバウンドの値設定)
ALBリスナー(知るべきはALB ARN, 責務はデフォルトの振る舞い)
ALBリスナールール(知るべきはALB ARN, 責務はパスパターンなどの条件とアクション,forwardingなど)
https://gyazo.com/fc00d911026d6739d1d852070c2dd74a
https://github.com/brikis98/terraform-up-and-running-code/blob/27a3beaf842dbe2a582e29f64373dfb793374ba8/code/terraform/02-intro-to-terraform-syntax/webserver-cluster/main.tf#L77
クラスタをデプロイしてLBのDNSからアクセスし確認OK
削除も依存関係を把握して Terraform がよしなに順番をもって削除する
詳解Terraform第3版 3章〜4章